package xyz.hubery.handler;


import lombok.extern.slf4j.Slf4j;
import xyz.hubery.domain.AsyncTask;
import xyz.hubery.enums.AsyncTaskStatus;
import xyz.hubery.enums.AsyncTaskType;
import xyz.hubery.model.TaskResult;

/**
 * 统一异步任务处理器
 */
public interface AsyncTaskHandler {


    /**
     * 支持的任务类型
     */
    AsyncTaskType getSupportedType();
    

    
    /**
     * 最大重试次数
     */
    default int getMaxRetry(AsyncTask task) {
        return task.getMaxRetry();
    }
    
    /**
     * 重试间隔（毫秒）
     */
    default long getRetryInterval() {
        return 5000L;
    }

    /**
     * 处理任务（核心方法
     */
    TaskResult handle(AsyncTask task);

    /**
     * 处理成功时的后续操作
     */
    default void onSuccess(AsyncTask task, TaskResult result) {
        // 默认实现：记录日志
    }

    /**
     * 处理失败时的后续操作
     */
    default void onFailure(AsyncTask task, TaskResult result) {
        // 执行失败
    }

    /**
     * 重试时的后续操作
     */
    default void onRetry(AsyncTask task) {

    }

    /**
     * 任务跳过时的后续操作
     */
    default void onSkipped(AsyncTask task, String reason) {
    }
}